Введение. Pld версия платы состоит из 6 (или даже из 4 микросхем, если в амиге уже установлена rom с поддержкой IDE винта, тоесть kickstart 37.300 и выше). Это микросхемы: 1. микросхема dd21 - pld FX740LC68 (производства ALTERA по лицензии INTEL) (стоимость около 20$) 2. микросхемы мултиплексоров dd16, dd17, dd18 3. счетчик для регенерации памяти dd20 4. микросхемы пзу типа 27C2000 - dd14,dd15 (rom) При этом часть платы, содержащую остальные микросхемы мелкой логики можно даже обрезать или ещё проще - не изготавливать. | -------------------------------|----------------- | | | | | | ----- | | | component side |^| |^| |^| |^| | | | | | | | | | | | | |_| |_| |_| |_| | | | | | |^| |^| |^| |^| | | | | | | | | | | | | ------- |_| |_| |_| |_| | | | | | | | | pld | | | | | | |^| |^| |^| |^| | | | | | | | | | | | | | | ------- |_| |_| |_| |_| | | | | | | | ---- -------|----------------- | | | | | \ | | \ ---------------------- линия отреза К сожалению из-за отсутствия в городе Екатеринбурге данной микросхемы вариант платы с pld не был проверен, но была произведена симуляция микросхемы во всех режимах, что гарантирует около 80% того, что прошивку не придётся изменять. Поэтому, если вы не имеете опыта программирования pld, то вам лучше выбрать вариант без pld, чтобы было меньше риска. Также необходимо при включении питания нажать на кнопку sys_rst для инициалиции внутренних pld регистров. Информация о PLD. pld FX740LC-15 содержит 40 триггерных элементов + много логичестких элементов для создания логических елементов по принципу and-or. Современные программаторы поддерживают программирование этой микросхемы. Она также может быть запрограммирована через парраллельный порт на IBM PC с помощью программы Pldshell через внутрисхемный JTAG интерфейс. Существует две версии данной микросхемы с ram-логической матрицей и с flash-логической матрицей. Покупать надо с flash-матрицей, чтобы после программирования информация оставалась в микросхеме после выключения питания. Возможно такая микросхема называется FX840LC68-15. Лучше поинтересуйтесь у фирмы-продовца об возможностях покупаемой микросхемы. Самое главное не купите pld семейства MAX. Это более хорошие и дешевые pld, но тогда вам придётся самим переразводить плату и переделывать прошивку под язык описания схем MAX2+. Более подробное описание микросхемы дано в gfx/fx-740.png Реализация прошивки. Реализация прошивки очень похожа на реализацию схемы, но при этом добавляется много разных возможностей. Все 40 тригеров микросхемы заняты и врят-ли вы сможете что-то оптимизировать для этой pld и данного набора возможностей. :) Ресурсы pld расходуются почти на все 100%... В pld реализован конечный автомат (pld/state_machine.gif), который работает в двух режимах и обеспечивает опознавание kickstartом стандартных ide портов (A600 или A1200) при обращении kickstarta по адресу $DE1000. При этом, как показано на вышеупомянутом рисунке с помощью перехода из состояний 010->011->100->101 kickstart считывает по линии данных D15 последовательность 1101, что и говорит kickstartу o наличии IDE-чипа. Второй режим позволяет получить код 1001, который можно использовать для определения наличия pld. Выбор одного из режимов осуществляется при помощи состояния внутреннего регистра pld id_dis. То есть когда id_dis=0 опознавание ide chipа разрешено (1101), a при id_dis=1 опознавание не производится (1001). Внутренние регистры доступны при при обращении по адресу $B8xxxx. Этот адрес зарезервирован производителями amiga, поэтому я его и использовал. ;-) Если вам не нравится этот адрес, то можете назначить свой в файле pld/hm010.pds (если сможете). При записи в эту область надо чтобы d14 было равно 1. Если там будет 0, то запись во внутренний регистр pld не состоится. При Бит d15 содержит данные для записи в регистр. При чтении с $B8xxxx содержимое регистра попадает в бит d15. При чтении или записи по адресу $B8xxxx происходит обращение к одному из семи регистров. Какой именно регистр определяется состоянием конечного автомата (pld/state_machine.gif). Hапример для записи в регистр id_dis необходимо выполнить: moveq.l #0,d0 move.w d0,$de1000 move.w d0,$de1000 move.w #%X100000000000000,$b80000 ; X-значение бита id_dis Примечательно, что две записи в $DExxxx всегда приводят конечный автомат в состояние 010. При id_dis=0 может быть осуществлён доступ к регистрам id_dis, hdd_dis, mem_dis. При id_dis=1 может быть осуществлён доступ к регистрам id_dis, c0_mem_en, f8_mem_en, f8_wr_en, con_dis. Кроме того состояние бита id_dis отвечает за ID-код, нужный для опознавания винта и загрузки scsi.device в память amigа. reset по ctrl-a-a не меняет состояния регистров. Кнопка sys_rst сбрасывает все регистры в состояние 0. Описание бит регистров: con_dis: (доступ при 001 state) 0 - Hормальная работа 1 - Текущее состояние внутренних регистров запоминается (включая сам бит con_dis) и больше не меняется при любых записях в любые порты. Это так называемый бит-защёлка. Его можно изменить только один раз из 0 в 1. Только sys_rst востонавливает состояние 0. Это нужна для возможности защиты от несанкцианированного доступа или случайных записей каких-нибудь программ. id_dis: (доступ при 010 state) 0 - Выдается после записи и последующего чтения $dexxxx на линии данных d15 последовательность 1101 ($d) По коду $d scsi.device вгружается в память. 1 - Выдается после записи и последующего чтения $dexxxx на линии данных d15 последовательность 1001 ($9) По коду 9 можно определять наличие pld. mem_dis: (доступ при 100 state) 0 - По адресам $200000-$9fffff и $c00000-$d7ffff возможно наличие памяти (если она конечно установлена в плату). 1 - По адресam $200000-$9fffff и $c00000-$d7ffff обращения 68000 платой игнорируется (память отключается). hdd_dis: (доступ при 011 state) 0 - По адресам $daxxxx поры винта присутствуют и chip винтa с адреса de1000 опазнается (код 1101 при id_dis=0). 1 - По адресам $daxxxx поры винта отключены и chip винтa с адреса de1000 не опазнается (код 1111 при id_dis=0). По сути это отключение винта и его опознавания. c0_mem_en: (доступ при 100 state) 0 - 1.5Мб памяти на адресах $800000-$97ffff остаются на своём месте. По адресам $c00000-$d7ffff памяти нет. 1 - Область памяти размером 1.5Mb с адреса $800000-$97ffff перемещается на $c00000-$d7ffff (remap ram на $c0). f8_mem_en: (доступ при 111 state) 0 - 0.5Мб памяти на адресах $980000-$9fffff остаются на своём месте. По адресам $f80000-$ffffff присутствует rom. 1 - Область памяти размером 0.5Mb с адреса $980000-$9fffff перемещается на $f80000-$ffffff (аппаратный remap ram на rom). При этом rom отключается. f8_wr_en: (доступ при 000 state) 0 - если f8_mem_en=1, то по адресам $f80000-$ffffff запись производится не может. Это полноценная эмуляция rom. 1 - если f8_mem_en=1, то по адресам $f80000-$ffffff запись производится может. В этом режиме можно записывать прямо в "rom", ставить там точки останова и т.п. ;) Порты IDE винта и память. Порты IDE винта и опазнавание chipа винта реализованы точно также как и на a600 или a1200. Поэтому все kickstats (начиная с 37.300) для этих машин могут работать через стандартный scsi.device. В pld не реализован принцип автоконфига, поэтому kickstart в базовой конфигурации опазнаёт только 4мб с адреса $600000, как pcmcia память. Для опознования ещё 4мб с адреса $200000 можно запустит програмку prog/add4m. ;) Hо самое оптимальное воспользоватся пропатченным kickstart-rom 39.106 от a1200. Более детально это описано в doc/rom_kick.txt Симуляция. В файле pld/hm010.pds в секции simulation находится эмуляция циклов обращения процессора 68000/68010 к памяти, пзу, ide портам и пр. Ошибки. Hепонятно почему, но cd-rom скорее всего не будет работь, хотя винты работают отлично. :( Может кто-нибудь это дело расхакает и мне объяснит что за бит ещё требуется в ide портах. Мне известно только назначение бит d15 da8000 (разрешение пропускания irq), da9000 (флаг irq) и daa000 (прописк irq на int2). K сожалению производители амиги не разглашают даже то, что обращения к $da2000 вырабатывают cs0, а к $da3000 - cs1. ;-)